#include "gpio_irq.h"

extern T_GPIO_INFO * gpio_sets;

// EXTI线0中断处理
void EXTI0_IRQHandler(void) 
{
    HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
}

// EXTI线1中断处理
void EXTI1_IRQHandler(void) 
{
    HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1);
}

// EXTI线2中断处理
void EXTI2_IRQHandler(void) 
{
    HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2);
}

// EXTI线3中断处理
void EXTI3_IRQHandler(void) 
{
    HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
}

// EXTI线4中断处理
void EXTI4_IRQHandler(void) 
{
    HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_4);
}

// EXTI线5-9中断处理
void EXTI9_5_IRQHandler(void) 
{
    if (__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_5) != RESET) 
    {
        HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_5);
    }
    if (__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_6) != RESET) 
    {
        HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_6);
    }
    if (__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_7) != RESET) 
    {
        HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_7);
    }
    if (__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_8) != RESET) 
    {
        HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8);
    }
    if (__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_9) != RESET) 
    {
        HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_9);
    }
}

// EXTI线10-15中断处理
void EXTI15_10_IRQHandler(void) 
{
    if (__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_10) != RESET) 
    {
        HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_10);
    }
    if (__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_11) != RESET) 
    {
        HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_11);
    }
    if (__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_12) != RESET) 
    {
        HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12);
    }
    if (__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_13) != RESET) 
    {
        HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
    }
    if (__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_14) != RESET) 
    {
        HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_14);
    }
    if (__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_15) != RESET) 
    {
        HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_15);
    }
}

void gpio_irg_handle(void)
{
    int i = 0;
    int pin_name = 0;
    uint16_t exti_pin = 0;
    
    for(i = 0; i < MAX_IRQ_SOURCE; i++)
    {        
        // 获取引脚名称（根据您的实际映射实现）
        // pin_name = mcu_irq_mapping_list[i].pin_name;
        
        exti_pin = (1 << gpio_sets[pin_name].gpio_physical_pin);
        
        // 检查中断标志
        if (__HAL_GPIO_EXTI_GET_FLAG(exti_pin) != RESET)
        {
            // 清除中断标志
            __HAL_GPIO_EXTI_CLEAR_FLAG(exti_pin);
            
            if (pin_name == KEY0_PIN)
            {
                printf("key0 irq\r\n");
            }
            if (pin_name == KEY1_PIN)
            {
                printf("key1 irq\r\n");
            }
            if (pin_name == KEY2_PIN)
            {
                printf("key2 irq\r\n");
            }
        }
    }
}


